package com.winshare.saleAssistant.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.winshare.saleAssistant.domain.dto.req.DataAnalysisQueryDTO;
import com.winshare.saleAssistant.model.ProductStatistics;
import com.winshare.saleAssistant.model.RegionStatistics;
import com.winshare.saleAssistant.model.ReportStatistics;
import com.winshare.saleAssistant.model.SchoolRankingModel;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 部门表 Mapper 接口
 * </p>
 *
 * @author stylefeng
 * @since 2017-07-11
 */
public interface DataStaticMapper extends BaseMapper<ProductStatistics> {

    /**
     * 产品统计信息
     */
    List<ProductStatistics> getProductReportFormWarpper(@Param("time") String time);

    /**
     * 市级排行
     * @param time
     * @return
     */
    List<RegionStatistics> getCityReportFormWarpper(@Param("time") String time, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);

    /**
     * 区县排行
     *
     * @param time
     * @return
     */
    List<RegionStatistics> getAreaReportFormWarpper(@Param("time") String time, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);

    ReportStatistics getReportFormWarpper(@Param("time") String time, @Param("year") String year, @Param("lastMonth") String lastMonth, @Param("lastYear") String lastYear);

    /**
     * 获取模块使用时长最长的排行
     *
     * @param starTime
     * @param endTime
     * @param productName
     * @param areaName
     * @param productCode
     * @return
     */
    List<Map<String, Object>> getModularUseTime(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName, @Param("orderBy") String orderBy, @Param("productCode") String productCode);

    /**
     * 获取功能使用最多的排行
     *
     * @param starTime
     * @param endTime
     * @param productName
     * @param areaName
     * @return
     */
    List<Map<String, Object>> getFunUseNum(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName, @Param("orderBy") String orderBy);

    Map<String, Object> getTotal(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    Map<String, Object> getTotal1(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    Map<String, Object> getTotal2(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    Map<String, Object> getTotal3(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    Map<String, Object> getTotal4(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    /**
     * 性别比列
     *
     * @param starTime
     * @param endTime
     * @param productName
     * @param areaName
     * @return
     */
    Map<String, Object> getUserSexTotal(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    /**
     * 年龄分布
     *
     * @param starTime
     * @param endTime
     * @param productName
     * @param areaName
     * @return
     */
    List<Map<String, Object>> getUserAge(@Param("starTime") Date starTime, @Param("endTime") Date endTime, @Param("productName") String productName, @Param("areaName") String areaName);

    /**
     * 获取城市排名
     * @param dataAnalysisQueryDTO
     * @return
     */
    List<Map<String, Object>> getCityRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    /**
     * 获取区县排名
     * @param dataAnalysisQueryDTO
     * @return
     */
    List<Map<String, Object>> getAreaRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    /**
     * 获取区域排名
     * @param dataAnalysisQueryDTO
     * @return
     */
    List<Map<String, Object>> getParentAreaRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    /**
     * 获取学校排名
     * @param dataAnalysisQueryDTO
     * @return
     */
    List<Map<String, Object>> getSchoolRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    List<SchoolRankingModel> getSchoolRankingList(DataAnalysisQueryDTO dataAnalysisQueryDTO);
    /**
     * 获取学校排名总数
     * @param dataAnalysisQueryDTO
     * @return
     */
    int getSchoolRankingCount(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    /**
     * 获取用户排名总数
     * @param dataAnalysisQueryDTO
     * @return
     */
    int getUserRankingCount(DataAnalysisQueryDTO dataAnalysisQueryDTO);

    /**
     * 获取用户排名
     * @param dataAnalysisQueryDTO
     * @return
     */
    List<Map<String, Object>> getUserRanking(DataAnalysisQueryDTO dataAnalysisQueryDTO);
}